package manejoDB;

//import Presentacion.AltaServicio.TipoServicio;
import ModeloLogicoSistema.Orden;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 *
 * @author Veko
 */
public class AdministradorDBOrden {

    private ConexionDB abm_consulta;

    
    
    public AdministradorDBOrden() throws SQLException {
        this.abm_consulta = new ConexionDB();
    }

     /**
     * Conexion 
     *
     * @throws SQLException
     */

    public Boolean Conectar() throws SQLException {
        return this.abm_consulta.conectar();
    }

    public void desconectar() throws SQLException {
        this.abm_consulta.cierraConexion();
    }
    
    
     /**
     * AltaOrden:
     * Permite elementos null, el código de cantidades es Serial no se especifica
     * @param idCliente, fechaHoraPedido, fechaPactada, horaDesdePactada,
     * @param horaHastaPactada,estadoPedido,montoTotal,montoAbonado,
     * @param montoAdeudado,delivery
     * @throws SQLException
     */
    
    public void setNuevaOrden(Integer idCliente, String fechaHoraPedido,
            String fechaPactada, String horaDesdePactada,
            String horaHastaPactada, String estadoPedido,
            Double montoTotal, Double montoAbonado,
            Double montoAdeudado, Double descuento,boolean delivery, String horaPedido,String observaciones) throws SQLException {
        
        this.abm_consulta.insertar("INSERT INTO orden(idcliente, fechaPedido, "
                + "fechaentrega, fechapactada,horapactadadesde, horapactadahasta, "
                + "estadoorden, montototal, montoabonado, montoadeudado, delivery, "
                + "lugardealmacenajepedidolisto,horaPedido,descuento,observaciones) VALUES (" + idCliente + ",'" + 
                fechaHoraPedido + "'," + null + ",'" + fechaPactada
                + "','" + horaDesdePactada + "','" + horaHastaPactada + "','" + estadoPedido + "' , " + montoTotal
                + " ," + montoAbonado + " , " + montoAdeudado + " , " + delivery + " , " + null + ", '"+horaPedido+"',"+descuento+",'"+observaciones+"');");
   }
    
    

// getters
    public Integer getNuevoCodigoOrden() throws SQLException {
        Integer retorno = null;
        int i=0;
            ResultSet consulta = this.abm_consulta.consulta("Select idorden from orden;");
            while (consulta.next()) {
                i++;
        }
        return i+1;
    }

    public Integer getCodCliente(Integer codOrden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select idCliente from orden where idorden = " + codOrden + ";  ");
        Integer retorno = null;
        while (consulta.next()) {
            retorno = consulta.getInt("idCliente");
        }
        return retorno;
    }

    /**
     * @param codigoOrden
     * @return
     * @throws SQLException
     */
    public String getFechaPedido(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select fechaPedido"
                + " from Orden where idOrden=" + codigoOrden+" and "
                + "upper(estadoOrden)<>'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("fechaPedido");
            
        }
        return retorno;
    }
    
    
    public String getHoraPedido(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select horaPedido"
                + " from Orden where idOrden=" + codigoOrden+" and "
                + "upper(estadoOrden)<>'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("horaPedido");
            
        }
        return retorno;
    }

    public String getFechaPactada(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select fechaPactada"
                + " from orden where idOrden=" + codigoOrden + " and "
                + "upper(estadoOrden)<>'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("fechaPactada");
        }
        return retorno;
    }

    public String getFechaEntrega(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select fechaEntrega "
                + "from Orden where idOrden= "+codigoOrden+" and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("fechaEntrega");
        }
        return retorno;
    }

    public String getHoraPactadaDesde(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select horaPactadaDesde "
                + "from Orden where idOrden="+codigoOrden+ " and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("horaPactadaDesde");
        }
        return retorno;
    }

    public String getHoraPactadaHasta(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select horaPactadaHasta "
                + "from Orden where idOrden="+codigoOrden+" and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("horaPactadaHasta");
        }
        return retorno;
    }

    public Double getMontoTotal(Integer codorden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select montoTotal from "
                + "orden where idOrden = " + codorden + " and upper(estadoOrden)"
                + "<>'ANULADA';");

        Double retorno = null;
        while (consulta.next()) {
            retorno = consulta.getDouble("montoTotal");
        }
        return retorno;
    }

    public Double getMontoAbonado(Integer codorden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select montoAbonado from "
                + "orden where idOrden = " + codorden + "and upper(estadoOrden)"
                + "<>'ANULADA';");

        Double retorno = null;
        while (consulta.next()) {
            retorno = consulta.getDouble("montoAbonado");
        }
        if (retorno == null) {
            retorno = new Double(0);
        }
        return retorno;
    }

    public Double getMontoAdeudado(Integer codorden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select montoAdeudado from "
                + "orden where idorden = " + codorden + "and upper"
                + "(estadoOrden)<>'ANULADA';");

        Double retorno = null; //new Integer();  
        while (consulta.next()) {
            retorno = consulta.getDouble("montoAdeudado");
        }
        if (retorno == null) {
            retorno = new Double(0);
        }
        return retorno;
    }

    public boolean getDelivery(Integer codigoOrden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select delivery from "
                + "orden where idorden = " + codigoOrden + " and upper(estadoOrden)<>'ANULADA';");

        boolean retorno = false;
        while (consulta.next()) {
            retorno = consulta.getBoolean("delivery");
        }
        return retorno;
    }

    public String getLugarDeAlmacenajePedidoListo(String estado,Integer codorden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select lugardealmacenajepedidolisto "
                + "from orden where idorden = " + codorden + " and upper(estadoOrden)"
                + "=upper('"+estado+"');");

        String retorno = null; 
        while (consulta.next()) {
            retorno = consulta.getString("lugardealmacenajepedidolisto");
        }
        return retorno;
    }

    public String getEstadoOrden(Integer codorden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta("select estadoOrden from "
                + "orden where idorden = " + codorden + ";  ");

        String mostrar = null; 
        while (consulta.next()) {
            mostrar = consulta.getString("estadoOrden");
        }
        return mostrar;
    }

    public List<Integer> getOrdenesPorEstado(String estadoOrden) throws SQLException{
        ResultSet consulta = this.abm_consulta.consulta("SELECT idorden,estadoorden FROM orden;");
        List<Integer> resultado = new ArrayList<>(); 
        while (consulta.next()) {
            Integer id = consulta.getInt("idorden");
            String estado = consulta.getString("estadoorden");
            if(estado.equalsIgnoreCase(estadoOrden)){
                resultado.add(id);
            }
        }
        return resultado;
    }
    
    public List<Integer> getOrdenesPorCliente(Integer codCliente) throws SQLException {

        ResultSet consulta = this.abm_consulta.consulta("SELECT idorden FROM "
                + "orden where idcliente= " + codCliente + " and "
                + "upper(estadoOrden)<>'ANULADA';");
        List<Integer> mostrar = new ArrayList<>();
        while (consulta.next()) {
            Integer id = consulta.getInt("idorden");
            mostrar.add(id);
        }
        return mostrar;
    }
    // modificar cantidades

    public void ModificarCliente(Integer codigoCliente, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set idcliente = " + codigoCliente + "  where idorden = " + id + " ; ");
    }

    /**
     * @deprecated No tiene sentido, no debería modificarse la fecha en que se
     * hizo la cantidades
     */
    public void ModificarFechaPedido(String fecha, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set fechaPedido = " + fecha + "  where idorden = " + id + " ; ");
    }

    public void ModificarFechaEntregaPactada(String fecha, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set fechaPactada = '" + fecha + "'  where idorden = " + id + " ; ");
    }

    public void ModificarFechaEntrega(String fecha, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set fechaEntrega= '" + fecha + "'  where idorden = " + id + " ; ");
    }

    public void ModificarHoraPactadaDesde(String hora, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set horaPactadaDesde= '" + hora + "'  where idorden = " + id + " ; ");
    }

    public void ModificarHoraPactadaHasta(String hora, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set horaPactadaHasta= '" + hora + "'  where idorden = " + id + " ; ");
    }


    public void ModificarMontoTotal(Double monto, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set montoTotal= " + monto + "  where idorden = " + id + " ; ");
    }

    public void ModificarMontoAbonado(Double monto, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set montoAbonado= " + monto + "  where idorden = " + id + " ; ");
    }

    public void ModificarMontoAdeudado(Double monto, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set montoAdeudado= " + monto + "  where idorden = " + id + " ; ");
    }

    public void ModificarLugarAlmacenajePedidoListo(String descripcion, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set lugardealmacenajepedidolisto = '" + descripcion + "'  where idorden = " + id + " ; ");
    }

    public void ModificarEstado(String estado, Integer id) throws SQLException {
        this.abm_consulta.actualizar("update orden set estadoOrden = '" + estado + "'  where idorden = " + id + " ; ");
    }

    /*
     * Se utiliza para cargar servicios
     */
    public void setServicioOrden(Integer codServicio, Integer codOrden,
            Double precio, Integer cantidad,Double costoT) throws SQLException {
        
        this.abm_consulta.insertar("insert into servicioorden (idorden,idservicio,precioservicio,cantidad,costoT) values ("
                + codOrden + "," + codServicio + "," + precio + "," + 
                cantidad+ "," + costoT + ");");
    }
    
    public void setServicioEspecial(Integer codOrden, String nombre, Double precio, Integer cantidad,String tipo) throws SQLException {
        this.abm_consulta.insertar("insert into ServicioEspecialOrden (idOrden ,nombre,tiposervesp,precioservicio,cantidad) values ("+codOrden + ",'"+nombre+"','" + tipo + "'," + precio + "," + cantidad+ ");");
    }

    public List<Integer> getAllCodOrdenes() throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idOrden FROM orden;");
        Integer mostrar = null;
        ArrayList<Integer> ordenes = new ArrayList<>();
        while (consulta.next()) {
            mostrar = consulta.getInt("idorden");
            ordenes.add(mostrar);
        }
        return ordenes;
    }
    public Double getPrecioEnServOrden(Integer codServ, Integer codOrden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT precioservicio FROM servicioorden where idOrden="+codOrden+" and idServicio="+codServ+";");
        Double mostrar = null;
        while (consulta.next()) {
            mostrar = consulta.getDouble("precioservicio");
        }
        return mostrar;
    }

    public Integer getCantEnServOrden(Integer codServ, Integer codOrden) throws SQLException {
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT cantidad FROM servicioorden where idOrden="+codOrden+" and idServicio="+codServ+";");
        Integer mostrar = null;
        while (consulta.next()) {
            mostrar = consulta.getInt("cantidad");
        }
        return mostrar;
    }
    
    
    
    public List<Integer> getAllCodServicios(Integer cod) throws SQLException{
        List<Integer> lista= new ArrayList();
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idservicio FROM servicioorden where idOrden="+cod+";");
                //("SELECT idservicio FROM servicioorden;");
        while (consulta.next()) {
            Integer mostrar = consulta.getInt("idservicio");
            lista.add(mostrar);
        }
        
        return lista;
    }
    
    public List<Integer> getPlanchados(Integer codOrden,String servicioTipo) throws SQLException{
        List<Integer> lista= new ArrayList();
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT so.idservicio FROM servicioorden so,servicio s where so.idservicio=s.idservicio and "
                + "s.tipo='"+servicioTipo+"' and idOrden="+codOrden+";");
                //("SELECT idservicio FROM servicioorden;");
        while (consulta.next()) {
            Integer mostrar = consulta.getInt("idservicio");
            lista.add(mostrar);
        }
        
        return lista;
    }
    
    
    public List<Integer> getAllCodServiciosEsp(Integer cod) throws SQLException{
        List<Integer> lista= new ArrayList();
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idservicioesp FROM servicioespecialorden where idOrden="+cod+";");
       
        while (consulta.next()) {
            Integer mostrar = consulta.getInt("idservicioesp");
            lista.add(mostrar);
        }
        
        return lista;
    }
    
    
    private Integer getCantServPendientesPorEstado(Integer idorden,String tipoServicio) throws SQLException {
        ArrayList<Integer> cantidades=new ArrayList();
        Integer total=0;
        ResultSet consulta = this.abm_consulta.consulta("Select cantidad from servicioOrden so, "
                + "servicio s where so.idServicio=s.idServicio and idOrden="+idorden+" and upper(tipo)=upper('"+tipoServicio+"');");
        while(consulta.next()){
            Integer cant=consulta.getInt("cantidad");
            cantidades.add(cant);
        }
        ListIterator it=cantidades.listIterator();
        while(it.hasNext()){
            Integer cant=(Integer)it.next();
            total=total+cant;
        }
        return total;
    }
 
    public int getCantPendientesPorEstado(String fechaEntrega, String estado,String tipoServicio) throws SQLException {
        Integer cantServ=0;
        ArrayList<Integer> cantidades=new ArrayList();
        Integer idorden;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden FROM orden where fechaPactada='"+fechaEntrega+"' "
                + "and estadoOrden='"+estado+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idOrden");
            cantidades.add(idorden);
            
        }
        ListIterator it=cantidades.listIterator();
        while(it.hasNext()){
            idorden=(Integer)it.next();
            cantServ=this.getCantServPendientesPorEstado(idorden, tipoServicio)+cantServ;
            
        }
        return cantServ;
        
        
    }
    
    public String getNombreServicio(Integer codServ) throws SQLException {
        String nombre=null;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT nombre FROM servicio where idServicio="+codServ+";");
        while(consulta.next()){
            nombre=consulta.getString("nombre");
        }
        
        return nombre;
    }

    public String getNombreServicioEsp(Integer codS) throws SQLException {
        String nombre=null;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT nombre FROM servicioespecialorden where idServicioesp="+codS+";");
        while(consulta.next()){
            nombre=consulta.getString("nombre");
        }
        
        return nombre;
    }

    public Double getPrecioEnServOrdenEsp(Integer codS, Integer codOrden) throws SQLException {
        Double precio=null;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT precioservicio FROM servicioespecialorden where idServicioesp="+codS+" and idOrden="+codOrden+";");
        while(consulta.next()){
            precio=consulta.getDouble("precioservicio");
        }
        
        return precio;

    }

    public Integer getCantEnServOrdenEsp(Integer codS, Integer codOrden) throws SQLException {
        Integer cantidad=null;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT cantidad FROM servicioespecialorden where idServicioesp="+codS+" and idOrden="+codOrden+";");
        while(consulta.next()){
            cantidad=consulta.getInt("cantidad");
        }
        
        return cantidad;

    }

    public int getCantDeliverysPendientes(String fechaEntrega, String estado, String estadoA) throws SQLException {
        Integer cantDeliverys=0;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden FROM orden where fechaPactada='"+fechaEntrega+"' "
                + "and estadoOrden<>'"+estado+"' and estadoOrden<>'"+estadoA+"' and delivery=TRUE;");
        while(consulta.next()){
            int orden=consulta.getInt("idorden");
            cantDeliverys++;
        }
        return cantDeliverys;
    }

    public List<Integer> getOrdenesRealizadasElDia(String fecha) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList();
        Integer idorden;
        
        ResultSet consulta = this.abm_consulta.consulta
               
                ("SELECT idorden FROM orden where fechaordenrealizada='"+fecha+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idOrden");
            codOrdenes.add(idorden);
        }
        return codOrdenes;
    }

    public List<Integer> getOrdenesCreadasElDia(String fecha) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList();
        Integer idorden;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden FROM orden where fechaPedido='"+fecha+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idOrden");
            codOrdenes.add(idorden);
        }
        ListIterator it=codOrdenes.listIterator();
        
        return codOrdenes;
    }

    public List<Integer> getOrdenesPorEstadoPautadasPara(String estado, String fechaPactada) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList();
        Integer idorden;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden FROM orden where fechaPactada='"+fechaPactada+"' and estadoOrden='"+estado+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idOrden");
            codOrdenes.add(idorden);
        }
        ListIterator it=codOrdenes.listIterator();
        
        return codOrdenes;
    }

    public void agregarFechaListo(String fechaNueva, Integer codOrden) throws SQLException {
        
        this.abm_consulta.actualizar("update orden set fechaordenrealizada = '" + fechaNueva + "'  where idorden = " + codOrden + " ; ");
    }

    public List<Integer> getOrdenesEntregadasElDia(String estado, String fecha) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList();
        Integer idorden;

        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden,estadoOrden FROM orden where fechaEntrega='"+fecha+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idorden");
            String estadoO=consulta.getString("estadoOrden");
            if(estadoO.equalsIgnoreCase(estado)){
                codOrdenes.add(idorden);
            }
        }
        return codOrdenes;
    }

    public Integer getCantPendientesDeOrdenXTipo(String estado,String tipo,Integer cod) throws SQLException {
        Integer cantServ=0;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT cantidad FROM servicio s,servicioorden so where s.idservicio=so.idservicio and idorden="+cod
                + " and s.tipo='"+tipo+"';");
        while(consulta.next()){
            cantServ=cantServ+consulta.getInt("cantidad");
        }
        boolean estaPendiente=false;
        ResultSet consulta2 = this.abm_consulta.consulta("SELECT idOrden FROM orden where idorden="+cod+" and estadoOrden='"+estado+"';");
        while(consulta2.next()){
            Integer valor=consulta2.getInt("idOrden");
            if(valor!=null){
                estaPendiente=true;
            }
        }
        if(estaPendiente)
            return cantServ;
        else
            return 0;
    }

    public String getObservaciones(Integer codigoOrden) throws SQLException {
        String observaciones=null;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT observaciones FROM orden where idOrden="+codigoOrden+ ";");
        while(consulta.next()){
            observaciones=consulta.getString("observaciones");
        }
            return observaciones;
    }

    public List<Integer> getOrdenesEntregadasPautadasPara(String estado, String fecha) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList();
        Integer idorden;

        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden,estadoOrden FROM orden where fechaPactada='"+fecha+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idorden");
            String estadoO=consulta.getString("estadoOrden");
            if(estadoO.equalsIgnoreCase(estado)){
                codOrdenes.add(idorden);
            }
        }
        return codOrdenes;
    }

    public List<Integer> getOrdenesEntregadasEntre(String estado, String fechaI, String fechaF) throws SQLException {
        ArrayList<Integer> codOrdenes=new ArrayList(); 
        Integer idorden;
        
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT idorden,estadoOrden FROM orden where fechaEntrega>='"+fechaI+"' and fechaEntrega<='"+fechaF+"';");
        while(consulta.next()){
            idorden=consulta.getInt("idorden");
            String estadoO=consulta.getString("estadoOrden");
    
            if(estadoO.equalsIgnoreCase(estado)){
                codOrdenes.add(idorden);
            }
        }
        return codOrdenes;
    }

    public Double getCostoT(Integer codOrden) throws SQLException {
        Double costoT=new Double(0);
        Double costo;
        Integer cantidad;
        ResultSet consulta = this.abm_consulta.consulta
                ("SELECT costoT,cantidad FROM servicioorden where idOrden='"+codOrden+"';");
        while(consulta.next()){
            costo=consulta.getDouble("costoT");
            cantidad=consulta.getInt("cantidad");
            if(costo==null){
                costo=new Double(0);
            }
            costoT=costoT+costo*cantidad;
    
        }
        return costoT;
    }

    public String getHoraEntrega(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select horaEntrega "
                + "from Orden where idOrden="+codigoOrden+ " and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("horaEntrega");
        }
        return retorno;
    }

    public String getHoraListo(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select horaordenrealizada "
                + "from Orden where idOrden="+codigoOrden+ " and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("horaordenrealizada");
        }
        return retorno;
    }

    public Double getDescuento(Integer codigoOrden) throws SQLException {
        Double retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select descuento "
                + "from Orden where idOrden="+codigoOrden+ " and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getDouble("descuento");
        }
        return retorno;
    }

    public void agregarHoraListo(String horaListo, Integer codOrden) throws SQLException {
        this.abm_consulta.actualizar("update orden set horaordenrealizada = '" + horaListo + "'  where idorden = " + codOrden + " ; ");
    }

    public void setHoraEntrega(String horaActual, Integer codOrden) throws SQLException {
        this.abm_consulta.actualizar("update orden set horaentrega = '" + horaActual + "'  where idorden = " + codOrden + " ; ");
    }

    public String getFechaListo(Integer codigoOrden) throws SQLException {
        String retorno = null;
        ResultSet consulta = this.abm_consulta.consulta("Select fechaordenrealizada "
                + "from Orden where idOrden="+codigoOrden+ " and upper(estadoOrden)<>"
                + "'ANULADA';");
        while (consulta.next()) {
            retorno = consulta.getString("fechaordenrealizada");
        }
        return retorno;
    }

    public void setMontoAdeudado(Double monto, Integer codOrden) throws SQLException {
        this.abm_consulta.actualizar("update orden set montoAdeudado = " + monto + "  where idorden = " + codOrden + " ; ");
    }

    public void setDelivery(boolean delivery, Integer codOrden) throws SQLException {
        this.abm_consulta.actualizar("update orden set delivery = " + delivery + "  where idorden = " + codOrden + " ; ");
    }

    public List<Integer> getOrdenesConDeliveryPorFechaPautada(String fechaPactada) throws SQLException {
        ArrayList<Integer> retorno = new ArrayList();
        ResultSet consulta = this.abm_consulta.consulta("Select idorden from orden where fechapactada='"
                +fechaPactada+ "' and upper(estadoOrden)<>'ANULADA' and upper(estadoOrden)<>'ENTREGADA' and delivery=true;");
        while (consulta.next()) {
            Integer cod = consulta.getInt("idOrden");
            retorno.add(cod);
        }
        return retorno;
    }

    public ArrayList<Integer> ordenesPendiente(String estado, String fechaPautada) throws SQLException {
        ArrayList<Integer> retorno = new ArrayList();

        ResultSet consulta = this.abm_consulta.consulta("Select idorden from orden where fechapactada='"
                +fechaPautada+ "' and upper(estadoOrden)=upper('"+estado+"');");
        while (consulta.next()) {
            Integer cod = consulta.getInt("idOrden");
            System.out.println(cod);
            retorno.add(cod);
        }
        return retorno;
    }

    
}
